﻿using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
using System.Text;
using Microsoft.Practices.Prism.Events;
using Microsoft.Practices.Prism.MefExtensions.Modularity;
using Microsoft.Practices.Prism.Regions;
using Samba.Presentation.Common;

namespace Samba.Modules.SampleShellModule
{
    [ModuleExport(typeof(SampleShellModule))]
    public class SampleShellModule : ModuleBase
    {
        private readonly IRegionManager _regionManager;
        private readonly ShellModuleView _shellModuleView;

        [ImportingConstructor]
        public SampleShellModule(IRegionManager regionManager, ShellModuleView shellModuleView)
        {
            _regionManager = regionManager;
            _shellModuleView = shellModuleView; // DI yöntemi ile ShellModuleView örneğini aldık. Modül ekranını aktifleştirmek için lazım.

            // Butona tıklandığına atılan eventi yakalamak için
            EventServiceFactory.EventService.GetEvent<GenericEvent<EventAggregator>>().Subscribe(x =>
            {
                // Event adını kontrol ediyoruz ve butona tıklandığında atılan event ise ekranı aktifleştiriyoruz.
                if (x.Topic == "Display Shell Module")
                    ActivateModule();
            });
        }

        protected override void OnInitialization()
        {
            // Butonu Ana ekranın UserRegion kısmına ekliyoruz.
            _regionManager.RegisterViewWithRegion(RegionNames.UserRegion, typeof(ShellButtonView));

            // Modül ekranını ana ekranın "Main Region" kısmına ekliyoruz.
            _regionManager.RegisterViewWithRegion(RegionNames.MainRegion, typeof(ShellModuleView));
            base.OnInitialization();
        }

        private void ActivateModule()
        {
            _regionManager.Regions[RegionNames.MainRegion].Activate(_shellModuleView);
        }
    }
}
